#include "defs.h"
#include "matriz.h"
#include "sistemas.h"

int n;

int main(int argc, char** argv)
{
	bool pelea = false;
	
	if (argc == 5)
	{
		/* Otros tiros. */
		pelea = true;		
	}
	else if (argc != 3)
	{
		/* Error. */		
		cout << "No. " << endl;		
	}
			
	int a;
	double aux;
	int turno = 0;
	
	/* Archivos. */
	string 	 pos (argv[1]);
	ifstream posicion(pos.c_str());
	string 	 out (argv[2]);
	ofstream salida(out.c_str());
	
	/* Leer posición. */
	posicion >> a >> n;	
	
	/* Variables. */
	Matriz matriz (n, Vector(n));
	Vector disparo (n);	
	Vector x (n);
	
	/* Matríz de Hilbert. */
	Matriz hil (n, Vector(n));
	Hilbert(hil, n);
	
	forn(i, n)
	{		
		posicion >> aux;
		x[i] = aux;
	}
		
	if (pelea)
	{		
		/* Más archivos. */
		string 	 ult (argv[3]);
		ifstream ultimo(ult.c_str());	
	
		ultimo >> turno >> a;
	}
	
	forn(i, n)
	{
		forn(j, n)		
			matriz[i][j] = 0;		
		
		matriz[i][i] = 2;
	}
	
	/* Salida */
	matrizPorVector(matriz, x, disparo, n);
	
	salida.precision(20);
	salida.setf(std::ios_base::scientific, std::ios_base::floatfield);
	
	salida << turno+1 << endl;
	salida << n << endl;
	
	/* Vector d */
	forn(i, n)		
		salida << disparo[i] << " ";
	salida << endl;
	
	/* Matríz usada */
	forn(i, n)
	{
		forn(j, n)
			salida << matriz[i][j] << " ";
			
		salida << endl;
	}
		
	posicion.close();
	salida.close();
	
	return 0;
}
